package customizeservicelogic

import (
	"context"
	"fmt"
	"github.com/zeromicro/go-zero/core/logx"
	"property_service/internal/svc"
	"property_service/property_service"
)

type CxLengthLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewCxLengthLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CxLengthLogic {
	return &CxLengthLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// CxLength 是一个用于获取数据表中满足条件的记录数量的方法
// 查询长度  获取项目编码是否已存在
// 参数 in 包含表名、判断字段、判断值和租户ID等信息
// 返回值包含响应码、记录数量和相关信息
func (l *CxLengthLogic) CxLength(in *property_service.JudgmentConditions) (*property_service.ResponseId, error) {
	// 判断值是否为空
	if in.TableName == "" { // 检查表名是否为空
		return &property_service.ResponseId{ // 如果表名为空，返回错误响应
			Code:    404,          // 设置错误码为404
			Id:      0,            // 设置ID为0
			Message: "表名为空,请添加表名", // 设置错误信息
		}, nil
	}
	//获取DB
	DB := l.svcCtx.Gorm
	//获取长度
	var lens int64
	DB.Raw(fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE %s = ? AND tenant_id = ?", in.TableName, in.JudgmentField), in.JudgmentValue, in.TenantID).Scan(&lens)

	// 创建成功，返回成功响应

	return &property_service.ResponseId{
		Id:      lens,
		Code:    200,
		Message: "获取长度为:" + fmt.Sprintf("%d", lens),
	}, nil
}
